<script>
  // 给你一个字符串 path ，表示指向某一文件或目录的 Unix 风格 绝对路径 （以 '/' 开头），请你将其转化为更加简洁的规范路径。

  // 在 Unix 风格的文件系统中，一个点（.）表示当前目录本身；此外，两个点 （..） 表示将目录切换到上一级（指向父目录）；两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠（即，'//'）都被视为单个斜杠 '/' 。 对于此问题，任何其他格式的点（例如，'...'）均被视为文件/目录名称。

  // 请注意，返回的 规范路径 必须遵循下述格式：

  // 始终以斜杠 '/' 开头。
  // 两个目录名之间必须只有一个斜杠 '/' 。
  // 最后一个目录名（如果存在）不能 以 '/' 结尾。
  // 此外，路径仅包含从根目录到目标文件或目录的路径上的目录（即，不含 '.' 或 '..'）。
  // 返回简化后得到的 规范路径 。

  // 来源：力扣（LeetCode）
  // 链接：https://leetcode.cn/problems/simplify-path

  // 输入：path = "/home/"
  // 输出："/home"
  // 解释：注意，最后一个目录名后面没有斜杠。

  // 输入：path = "/../"
  // 输出："/"
  // 解释：从根目录向上一级是不可行的，因为根目录是你可以到达的最高级。

  /**
   * 分析
   * 使用栈
   * 栈顶元素 不为 / 不做添加 即 字母一类
   * 入栈元素为/ 栈顶元素为/ 也不能添加
   * 存在 .. 弹出栈顶元素
   * . 不做处理 跳过
   * 有效值存入栈
   */

  // 输入 "/a/./b/../../c/"
  // 输出 "/c"

  /**
   * @param {string} path
   * @return {string}
   */
  var path = '/a/./b/../../c/';
  var simplifyPath = function (path) {
    var names = path.split('/');
    var stack = []; // 栈容器
    for (const name of names) {
      console.log(name);
      if (name === '..') {
        stack.pop();
      } else if (name.length && name !== '.') {
        stack.push(name);
      }
    }

    return '/' + stack.join('/');
  };
  console.log(simplifyPath(path));
</script>
